看下ObservableMap的构造方法,传入的参数,source为转换前的Observable< T >, 第二个参数就是我们得function。 ObservableMap继承AbstractObservableWithUpstream,而后者继承Observable,可以看出来,经过map转换后的Observable对象就是ObservableMap类型。
//MapObserver继承BasicFuseableObserver,而后者实现了Observer接口 staticfinalclassMapObserver<T, U> extendsBasicFuseableObserver<T, U> { //map操作符中的function final Function<? super T, ? extends U> mapper; //actual是栗子中我们后面subscribe的Observer MapObserver(Observer<? super U> actual, Function<? super T, ? extends U> mapper) { super(actual); this.mapper = mapper; }
@Override publicvoidonNext(T t){ //done在执行了onError或者onComplete之后为true,具体查看父类BasicFuseableObserver。done为true时,不做处理。 if (done) { return; }
if (sourceMode != NONE) { actual.onNext(null); return; }
//U类型,转换后的类型,栗子中为String U v;
try { //常规非空检查,但是里面有个apply的操作,这个apply的操作就是我们上面栗子中把Integer转成String的操作。v就是转换后的String类型 v = ObjectHelper.requireNonNull(mapper.apply(t), "The mapper function returned a null value."); } catch (Throwable ex) { fail(ex); return; } //Observer执行onNext操作,v为转换后的类型,如栗子中的String actual.onNext(v); }
@Nullable @Override public U poll()throws Exception { T t = qs.poll(); return t != null ? ObjectHelper.<U>requireNonNull(mapper.apply(t), "The mapper function returned a null value.") : null; } }